﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Biciq.Datos;
using System.Collections.ObjectModel;
using System.Linq;
using System.Collections.Generic;

namespace Biciq.Silverlight.UI
{
    public class HistoriaBicicletaVistaModelo:VistaModeloBase
    {
        #region Constructores
        /// <summary>
        /// Metodo que muestra el historial de las Bicicletas.
        /// </summary>
        /// <param name="idBicicleta"></param>
        public HistoriaBicicletaVistaModelo(Guid  idBicicleta)
        {
            Bicicleta = idBicicleta;
            Buscar();
        }
        #endregion
        #region Campos
        private Guid _bicicleta;
        private List<VistaHistoriaBicicleta> _historia;
        private decimal _totalKilometros;
        private int _numeroUsos;
        private int _totalMinutos;


        private SeguimientoChildVista _seguimientoVista;
        private SeguimientoVistaModelo _seguimientoVistaModelo;
       
       

        #endregion
        #region Propiedades
        /// <summary>
        /// Metodo de minutos de uso.
        /// </summary>
        public int TotalMinutos
        {
            get { return _totalMinutos; }
            set
            {
                _totalMinutos = value;
                RaisePropertyChanged("TotalMinutos");
            }
        }
        /// <summary>
        /// Metodo que muestra la cantidad de usos de la bicicleta.
        /// </summary>
        public int NumeroUsos
        {
            get { return _numeroUsos; }
            set 
            { 
                _numeroUsos = value;
                RaisePropertyChanged("NumeroUsos");
            }
        }
        /// <summary>
        /// Metodo que muestra el total de kilometros recoridos.
        /// </summary>
        public decimal TotalKilometros
        {
            get { return _totalKilometros; }
            set
            {
                _totalKilometros = value;
                RaisePropertyChanged("TotalKilometros");
            }
        }

        public List<VistaHistoriaBicicleta> Historia
        {
            get { return _historia; }
            set
            {
                _historia = value;
                RaisePropertyChanged("Historia");
            }
        }

        public Guid Bicicleta
        {
            get { return _bicicleta; }
            set 
            {
                _bicicleta = value;
                RaisePropertyChanged("Bicicleta");
            }
        }

        #endregion
        #region Métodos Públicos
        public override void Buscar()
        {

            if (Bicicleta != null)
            {
                Procesando = true;
                BiciqContexto.VistaHistoriaBicicletas.Clear();
                
                BiciqContexto.Load(BiciqContexto.ConsultarHistoriaBicicletaQuery(Bicicleta)).Completed += delegate
                {
                    Procesando = false;
                    Historia = BiciqContexto.VistaHistoriaBicicletas.ToList();
                    if (Historia.Count > 0)
                    {
                        TotalKilometros = Historia.Sum(h => h.distancia.Value);
                        NumeroUsos = Historia.Count;
                        TotalMinutos = Historia.Sum(h => h.Minutos.Value);
                    }
                    else
                    {
                        AgregarMensajeInformacion("La bicicleta seleccionada no tiene movimientos registrados");
                        MostrarErrores = Visibility.Visible;
                    }

                };
            }

        }

        public override void Seleccionar(object parametro)
        {
            var Cliente = parametro as Cliente;
            _seguimientoVista = new SeguimientoChildVista();
            _seguimientoVistaModelo = new SeguimientoVistaModelo(Cliente);
            _seguimientoVista.DataContext = _seguimientoVistaModelo;

            _seguimientoVistaModelo.EventoCerrarEditor += delegate
            {
                _seguimientoVista.Close();

            };
            _seguimientoVista.Show();
        }
        #endregion
    }
}
